#============================================
#知识点
#1.就是在无参装饰器外，在套一个有参装饰器def(x,y,yz)任意多个参数
#2.调用时，在被装饰的对象上，加上@有参装饰器名称(x=1,y=2,z=3)就可以了
#3.需要多少参数就在装饰器上加几个参数，调用时也要加上多少
#4.多个装饰器叠加的方法
#============================================
#例子
from functools import wraps
def out(types,ids):
    def deo(func):
        @wraps(func)   #赋予wrapper被装饰对象的属性
        def wrapper(*args,**kwargs):
            if types == "加法":
                print("加法计算器")
                print("{}正在使用".format(ids))
                res = func(*args,**kwargs)
                return res
            elif types == "减法":
                print("减法计算器")
                print("{}正在使用".format(ids))
                res = func(*args,**kwargs)
                return res 
            elif types == "乘法":
                print("乘法计算器")
                print("{}正在使用".format(ids))
                res = func(*args,**kwargs)
                return res
            elif types == "除法":
                print("除法计算器")
                print("{}正在使用".format(ids))
                res = func(*args,**kwargs)
                return res 
            else:
                pass           
        return wrapper
    return deo

@out(types="加法",ids="小黑")  #先执行，给参数>>>到deo:jiafa = deo(jiafa)>>>>>>wrapper>>>>>调用参数
def jiafa(x,y):
    a = x+y
    return a
@out(types="减法",ids="小黑")
def jianfa(x,y):
    a = x-y
    return a
@out(types="乘法",ids="小黑")
def chengfa(x,y):
    a = x*y
    return a
@out(types="除法",ids="小黑")
def chufa(x,y):
    a = x/y
    return a
print(jiafa(1,2))
print(jianfa(1,2))
print(chufa(1,2))
print(chengfa(1,2))
#============================================
# #当一个函数叠加多个装饰器
# @deo1
# @deo2   #它的加载顺序为：自上下而上
# @deo3
# def qwq():
#     print("======")
#     return
# #执行顺序为：自上而下既：wrapper1>wrapper2>wrapper3
